package de.fhin.mas.agents.manager.behaviours;

import jade.domain.FIPAAgentManagement.FailureException;
import jade.domain.FIPAAgentManagement.NotUnderstoodException;
import jade.domain.FIPAAgentManagement.RefuseException;
import jade.lang.acl.ACLMessage;
import jade.lang.acl.MessageTemplate;
import jade.proto.AchieveREResponder;
import de.fhin.mas.MASEvents;
import de.fhin.mas.agents.manager.ManagerAgent;

/**
 * Ermöglicht es mit einer ACL-Message das InitNewOrder-Behaviour zu erzeugen.
 * <p>
 * Wird u.a. für die Tests benötigt.
 * <p>
 * Wartet auf ein "init_new_order", aufgrund welchem dann ein
 * InitNewOrder-Behaviour erzeugt wird, welches wiederum den eigentlichen
 * Auftrag einleitet.
 * 
 * @author Ast
 * 
 */
public class ServeNewOrder extends AchieveREResponder {
	private static final long serialVersionUID = 1543548938535794042L;

	private final ManagerAgent managerAgent;

	public ServeNewOrder(ManagerAgent a) {
		// TODO: Auf Topic umstellen
		super(a, MessageTemplate.and(MessageTemplate.MatchConversationId("init_" + MASEvents.NEW_ORDER.getName()),
				MessageTemplate.MatchPerformative(ACLMessage.REQUEST)));
		managerAgent = a;
	}

	@Override
	protected ACLMessage handleRequest(ACLMessage request) throws NotUnderstoodException, RefuseException {
		managerAgent.logInfo("INIT_NEW_ORDER_REQUEST received!");

		return null;
	}

	@Override
	protected ACLMessage prepareResultNotification(ACLMessage request, ACLMessage response) throws FailureException {
		managerAgent.logInfo("PREPARING RESULT INFO!");

		managerAgent.initNewOrder(null, null);
		return new ACLMessage(ACLMessage.INFORM);
	}
}
